/* 
 * File:   Job.h
 * Author: kuba
 *
 * Created on 7. listopad 2012, 19:01
 */

#ifndef JOB_H
#define	JOB_H

#include <string>

#include "printouts.h"


/** Pole slouzici pro snadny vypis stavu ulohy pomoci STR_STATE[state]. */
const char* const STR_STATE[] = {STR_RUNNING, STR_EXITED, STR_STOPPED, STR_QUITED, STR_KILLED};

/**
 * Trida reprezentujici job (spustenou ulohu) v shellu.
 */
class Job
{
public:

  /** Reprezentuje stav procesu/ulohy. */
  enum State
  {
    RUNNING, EXITED, STOPPED, QUITED, KILLED
  };

  /**
   * Vytvori novy job.
   * @param pid  PID procesu.
   * @param cmd  Prikaz, kterym byla uloha spustena.
   */
  Job(int id, int pid, const char* cmd, State state, bool piped);

  /**
   * Destruktor.
   */
  virtual ~Job();

  /**
   * ID ulohy (pro ucely spravy uloh).
   * @return ID ulohy
   */
  int getId() const;

  /**
   * PID ulohy.
   * @return PID ulohy
   */
  int getPgid() const;

  /**
   * Prikaz, kterym byla uloha spustena.
   * @return prikaz
   */
  const char* getCmd() const;

  /**
   * Stav ulohy - bezici nebo pozastavena.
   * @return stav ulohy
   */
  State getState() const;
  
  /**
   * Sestava uloha z vice procesu spojenych rourou?
   * @return true pokud ano, jinak false
   */
  bool isPiped() const;

  /**
   * Nastavi stav ulohy.
   * @param state aktualni stav ulohy
   */
  void setState(State state);

private:

  /** ID ulohy pro ucely spravy uloh v shellu */
  int id;

  /** PGID skupiny procesu ulohy (= PID leadera skupiny procesu) */
  int pgid;

  /** prikaz, kterym byla uloha spustena */
  std::string cmd;

  /** stav ulohy */
  State state;
  
  /** sestava uloha z vice procesu spojenych rourou? */
  bool piped;
};

#endif	/* JOB_H */

